{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 9.4.2 動画をframeごとに画像データに変換\n",
    "\n",
    "本ファイルでは、ダウンロードした動画をframeごとにjpeg形式の画像データに変換します。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 事前準備\n",
    "\n",
    "ffmepgが入っていない場合には、\n",
    "以下のコマンドをターミナルで実行し、Ubuntuにてffmpegをインストールします。\n",
    "\n",
    "- sudo apt install ffmpeg\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['arm wrestling', 'bungee jumping']\n",
      "ffmpeg -i \"./data/kinetics_videos/arm wrestling/BdMiTo_OtnU_000024_000034.mp4\" -vf scale=-1:256 \"./data/kinetics_videos/arm wrestling/BdMiTo_OtnU_000024_000034/image_%05d.jpg\"\n",
      "\n",
      "\n",
      "ffmpeg -i \"./data/kinetics_videos/arm wrestling/5JzkrOVhPOw_000027_000037.mp4\" -vf scale=-1:256 \"./data/kinetics_videos/arm wrestling/5JzkrOVhPOw_000027_000037/image_%05d.jpg\"\n",
      "\n",
      "\n",
      "ffmpeg -i \"./data/kinetics_videos/arm wrestling/ehLnj7pXnYE_000027_000037.mp4\" -vf scale=-1:256 \"./data/kinetics_videos/arm wrestling/ehLnj7pXnYE_000027_000037/image_%05d.jpg\"\n",
      "\n",
      "\n",
      "ffmpeg -i \"./data/kinetics_videos/arm wrestling/C4lCVBZ3ux0_000028_000038.mp4\" -vf scale=-1:256 \"./data/kinetics_videos/arm wrestling/C4lCVBZ3ux0_000028_000038/image_%05d.jpg\"\n",
      "\n",
      "\n",
      "ffmpeg -i \"./data/kinetics_videos/bungee jumping/dAeUFSdYG1I_000010_000020.mp4\" -vf scale=-1:256 \"./data/kinetics_videos/bungee jumping/dAeUFSdYG1I_000010_000020/image_%05d.jpg\"\n",
      "\n",
      "\n",
      "ffmpeg -i \"./data/kinetics_videos/bungee jumping/zkXOcxGnUhs_000025_000035.mp4\" -vf scale=-1:256 \"./data/kinetics_videos/bungee jumping/zkXOcxGnUhs_000025_000035/image_%05d.jpg\"\n",
      "\n",
      "\n",
      "ffmpeg -i \"./data/kinetics_videos/bungee jumping/TUvSX0pYu4o_000002_000012.mp4\" -vf scale=-1:256 \"./data/kinetics_videos/bungee jumping/TUvSX0pYu4o_000002_000012/image_%05d.jpg\"\n",
      "\n",
      "\n",
      "ffmpeg -i \"./data/kinetics_videos/bungee jumping/b6yQZjPE26c_000023_000033.mp4\" -vf scale=-1:256 \"./data/kinetics_videos/bungee jumping/b6yQZjPE26c_000023_000033/image_%05d.jpg\"\n",
      "\n",
      "\n",
      "動画ファイルを画像ファイルに変換しました。\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import subprocess  # ターミナルで実行するコマンドを実行できる\n",
    "\n",
    "\n",
    "# 動画が保存されたフォルダ「kinetics_videos」にある、クラスの種類とパスを取得\n",
    "dir_path = './data/kinetics_videos'\n",
    "class_list = os.listdir(path=dir_path)\n",
    "print(class_list)\n",
    "\n",
    "# 各クラスの動画ファイルを画像ファイルに変換する\n",
    "for class_list_i in (class_list):  # クラスごとのループ\n",
    "\n",
    "    # クラスのフォルダへのパスを取得\n",
    "    class_path = os.path.join(dir_path, class_list_i)\n",
    "\n",
    "    # 各クラスのフォルダ内の動画ファイルをひとつずつ処理するループ\n",
    "    for file_name in os.listdir(class_path):\n",
    "\n",
    "        # ファイル名と拡張子に分割\n",
    "        name, ext = os.path.splitext(file_name)\n",
    "\n",
    "        # mp4ファイルでない、フォルダなどは処理しない\n",
    "        if ext != '.mp4':\n",
    "            continue\n",
    "\n",
    "        # 動画ファイルを画像に分割して保存するフォルダ名を取得\n",
    "        dst_directory_path = os.path.join(class_path, name)\n",
    "\n",
    "        # 上記の画像保存フォルダがなければ作成\n",
    "        if not os.path.exists(dst_directory_path):\n",
    "            os.mkdir(dst_directory_path)\n",
    "\n",
    "        # 動画ファイルへのパスを取得\n",
    "        video_file_path = os.path.join(class_path, file_name)\n",
    "\n",
    "        # ffmpegを実行させ、動画ファイルをjpgにする （高さは256ピクセルで幅はアスペクト比を変えない）\n",
    "        # kineticsの動画の場合10秒になっており、大体300ファイルになる（30 frames /sec）\n",
    "        cmd = 'ffmpeg -i \\\"{}\\\" -vf scale=-1:256 \\\"{}/image_%05d.jpg\\\"'.format(\n",
    "            video_file_path, dst_directory_path)\n",
    "        print(cmd)\n",
    "        subprocess.call(cmd, shell=True)\n",
    "        print('\\n')\n",
    "\n",
    "print(\"動画ファイルを画像ファイルに変換しました。\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
